﻿////////////////////////////////////////////////////////////////////////////////
//
// Ariaware Source Code - Confidential Material
// Copyright © 2004 Aral Balkan. All Rights Reserved.
// Copyright © 2004 Ariaware Limited.
//
// Project: ARP Pizza Sample Application
// File: com/ariaware/pizza/view/Application.as
// Created by: Aral Balkan
//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Imports
////////////////////////////////////////////////////////////////////////////////

import com.ariaware.arp.ArpForm;

import com.ariaware.pizza.control.Controller;
import com.ariaware.pizza.view.*;

import mx.utils.Delegate;


////////////////////////////////////////////////////////////////////////////////
//
//
// Class: Application
//
//
////////////////////////////////////////////////////////////////////////////////
class com.ariaware.pizza.view.Application extends com.ariaware.arp.ArpForm
{
	// 
	// On stage
	//
	private var navigationForm:NavigationForm;
	private var orderForm:OrderForm;
	private var viewOrdersForm:ViewOrdersForm;
	private var dataPreloader:MovieClip;

	//
	// Private constants
	//

	//
	// Public constants
	//

	
	//
	// Private Properties 
	//
	
	// the application controller
	private var controller:Controller;
	
	////////////////////////////////////////////////////////////////////////////
	//
	// Constructor
	//
	////////////////////////////////////////////////////////////////////////////
	function Application ()
	{
		// We don't do anything in the constructor that involves child
		// components or forms since none of these have initialized
		// yet. Instead we carry out all such actions in the onLoad() event 
		// handler. 
	 						
		// Stop the timeline
		stop();
	}
	
	////////////////////////////////////////////////////////////////////////////
	//
	// Public Methods
	//
	////////////////////////////////////////////////////////////////////////////

	// none

	////////////////////////////////////////////////////////////////////////////
	//
	// Event Handlers
	//
	////////////////////////////////////////////////////////////////////////////

	////////////////////////////////////////////////////////////////////////////
	// orderFormSelect
	////////////////////////////////////////////////////////////////////////////
	function orderFormSelect ()
	{
		viewOrdersForm.hide();
		orderForm.show();
	}
	
	
	////////////////////////////////////////////////////////////////////////////
	// viewOrdersFormSelect
	////////////////////////////////////////////////////////////////////////////
	function viewOrdersFormSelect ()
	{
		orderForm.hide();
		viewOrdersForm.show();
	}
	


	////////////////////////////////////////////////////////////////////////////
	// onLoad()
	////////////////////////////////////////////////////////////////////////////
	function onLoad ()
	{
		// Note: This handler is used to initialize the application state. 
		trace ("Application::onLoad - Application initialization started!");

		// Get a reference to the Application Controller singleton
		controller = Controller.getInstance();
		controller.registerApp ( this );
		
		// Set the initial display state of the application
		setInitialDisplayState();
		
		// Listen for "changeForm" events from the Navigation Form
		// (These are broadcast when the user chooses to go to a different form)
		navigationForm.addEventListener ( "orderFormSelect", this );
		navigationForm.addEventListener ( "viewOrdersFormSelect", this );
		
		// Listen for events on Order Form
		orderForm.addEventListener ( "orderPizza", this );
		orderForm.addEventListener ( "orderProcessed", this );
		
		// Listen for events on the View Orders Form
		viewOrdersForm.addEventListener ( "getOrderList", Delegate.create ( this, showDataPreloader ) );
		viewOrdersForm.addEventListener ( "updateOrderList", Delegate.create ( this, hideDataPreloader ) );
		viewOrdersForm.addEventListener ( "cancelOrder", Delegate.create ( this, showDataPreloader ) );
		viewOrdersForm.addEventListener ( "orderCancelled", Delegate.create ( this, hideDataPreloader ) );
	}


	////////////////////////////////////////////////////////////////////////////
	// placeOrder()
	////////////////////////////////////////////////////////////////////////////
	function orderPizza ()
	{
		showDataPreloader();
	}
	

	////////////////////////////////////////////////////////////////////////////
	// placeOrder()
	////////////////////////////////////////////////////////////////////////////
	function orderProcessed ()
	{
		hideDataPreloader();
		viewOrdersFormSelect();
	}


	////////////////////////////////////////////////////////////////////////////
	// Getter/Setters
	////////////////////////////////////////////////////////////////////////////

	// none
	
	////////////////////////////////////////////////////////////////////////////
	//
	// Private Methods
	//
	////////////////////////////////////////////////////////////////////////////
	
	////////////////////////////////////////////////////////////////////////////
	// setInitialDisplayState
	////////////////////////////////////////////////////////////////////////////
	private function setInitialDisplayState ()
	{
		// Stage properties
		Stage.scaleMode = "noScale";
		Stage.align = "TL";	
		
		// (To keep the example simple, this application does not
		// listen for Stage events to relayout itself.) 
		
		// Setup data preloader
		dataPreloader._visible = false;
		dataPreloader.progressBar.indeterminate = true;
		dataPreloader.background.onRelease = function (){};
		dataPreloader.background.useHandCursor = false;

		// Set the global style for v2 component to Halo blue 
		_global.style.setStyle("themeColor", "haloOrange");
		
		// Make sure that the Navigation form is showing
		navigationForm.show();
		
		// Hide the View Orders form
		viewOrdersForm.hide();
		
		// Initialize and show the Order Form
		orderForm.initialize();
		orderForm.show();
		
		// Show the form
		// (Inherited from ArpForm) 
		show();	
	}


	////////////////////////////////////////////////////////////////////////////
	// showDataPreloader()
	////////////////////////////////////////////////////////////////////////////
	function showDataPreloader ()
	{
		dataPreloader._visible = true;
	}


	////////////////////////////////////////////////////////////////////////////
	// hideDataPreloader()
	////////////////////////////////////////////////////////////////////////////
	function hideDataPreloader ()
	{
		dataPreloader._visible = false;
	}

}

